home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / rpcsvc / nfs_prot.x < prev    next >
Text File  |  2009-10-07  |  8KB  |  353 lines

  1. /* @(#)nfs_prot.x    2.1 88/08/01 4.0 RPCSRC */
  2.  
  3. /*
  4.  * nfs_prot.x 1.2 87/10/12
  5.  * Copyright 1987 Sun Microsystems, Inc.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions are
  9.  * met:
  10.  *
  11.  *     * Redistributions of source code must retain the above copyright
  12.  *       notice, this list of conditions and the following disclaimer.
  13.  *     * Redistributions in binary form must reproduce the above
  14.  *       copyright notice, this list of conditions and the following
  15.  *       disclaimer in the documentation and/or other materials
  16.  *       provided with the distribution.
  17.  *     * Neither the name of Sun Microsystems, Inc. nor the names of its
  18.  *       contributors may be used to endorse or promote products derived
  19.  *       from this software without specific prior written permission.
  20.  *
  21.  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22.  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23.  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  24.  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  25.  *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
  26.  *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
  28.  *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  29.  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  30.  *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  31.  *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  32.  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33.  */
  34. const NFS_PORT          = 2049;
  35. const NFS_MAXDATA       = 8192;
  36. const NFS_MAXPATHLEN    = 1024;
  37. const NFS_MAXNAMLEN    = 255;
  38. const NFS_FHSIZE    = 32;
  39. const NFS_COOKIESIZE    = 4;
  40. const NFS_FIFO_DEV    = -1;    /* size kludge for named pipes */
  41.  
  42. /*
  43.  * File types
  44.  */
  45. const NFSMODE_FMT  = 0170000;    /* type of file */
  46. const NFSMODE_DIR  = 0040000;    /* directory */
  47. const NFSMODE_CHR  = 0020000;    /* character special */
  48. const NFSMODE_BLK  = 0060000;    /* block special */
  49. const NFSMODE_REG  = 0100000;    /* regular */
  50. const NFSMODE_LNK  = 0120000;    /* symbolic link */
  51. const NFSMODE_SOCK = 0140000;    /* socket */
  52. const NFSMODE_FIFO = 0010000;    /* fifo */
  53.  
  54. /*
  55.  * Error status
  56.  */
  57. enum nfsstat {
  58.     NFS_OK= 0,        /* no error */
  59.     NFSERR_PERM=1,        /* Not owner */
  60.     NFSERR_NOENT=2,        /* No such file or directory */
  61.     NFSERR_IO=5,        /* I/O error */
  62.     NFSERR_NXIO=6,        /* No such device or address */
  63.     NFSERR_ACCES=13,    /* Permission denied */
  64.     NFSERR_EXIST=17,    /* File exists */
  65.     NFSERR_NODEV=19,    /* No such device */
  66.     NFSERR_NOTDIR=20,    /* Not a directory*/
  67.     NFSERR_ISDIR=21,    /* Is a directory */
  68.     NFSERR_FBIG=27,        /* File too large */
  69.     NFSERR_NOSPC=28,    /* No space left on device */
  70.     NFSERR_ROFS=30,        /* Read-only file system */
  71.     NFSERR_NAMETOOLONG=63,    /* File name too long */
  72.     NFSERR_NOTEMPTY=66,    /* Directory not empty */
  73.     NFSERR_DQUOT=69,    /* Disc quota exceeded */
  74.     NFSERR_STALE=70,    /* Stale NFS file handle */
  75.     NFSERR_WFLUSH=99    /* write cache flushed */
  76. };
  77.  
  78. /*
  79.  * File types
  80.  */
  81. enum ftype {
  82.     NFNON = 0,    /* non-file */
  83.     NFREG = 1,    /* regular file */
  84.     NFDIR = 2,    /* directory */
  85.     NFBLK = 3,    /* block special */
  86.     NFCHR = 4,    /* character special */
  87.     NFLNK = 5,    /* symbolic link */
  88.     NFSOCK = 6,    /* unix domain sockets */
  89.     NFBAD = 7,    /* unused */
  90.     NFFIFO = 8     /* named pipe */
  91. };
  92.  
  93. /*
  94.  * File access handle
  95.  */
  96. struct nfs_fh {
  97.     opaque data[NFS_FHSIZE];
  98. };
  99.  
  100. /*
  101.  * Timeval
  102.  */
  103. struct nfstime {
  104.     unsigned seconds;
  105.     unsigned useconds;
  106. };
  107.  
  108.  
  109. /*
  110.  * File attributes
  111.  */
  112. struct fattr {
  113.     ftype type;        /* file type */
  114.     unsigned mode;        /* protection mode bits */
  115.     unsigned nlink;        /* # hard links */
  116.     unsigned uid;        /* owner user id */
  117.     unsigned gid;        /* owner group id */
  118.     unsigned size;        /* file size in bytes */
  119.     unsigned blocksize;    /* preferred block size */
  120.     unsigned rdev;        /* special device # */
  121.     unsigned blocks;    /* Kb of disk used by file */
  122.     unsigned fsid;        /* device # */
  123.     unsigned fileid;    /* inode # */
  124.     nfstime    atime;        /* time of last access */
  125.     nfstime    mtime;        /* time of last modification */
  126.     nfstime    ctime;        /* time of last change */
  127. };
  128.  
  129. /*
  130.  * File attributes which can be set
  131.  */
  132. struct sattr {
  133.     unsigned mode;    /* protection mode bits */
  134.     unsigned uid;    /* owner user id */
  135.     unsigned gid;    /* owner group id */
  136.     unsigned size;    /* file size in bytes */
  137.     nfstime    atime;    /* time of last access */
  138.     nfstime    mtime;    /* time of last modification */
  139. };
  140.  
  141.  
  142. typedef string filename<NFS_MAXNAMLEN>;
  143. typedef string nfspath<NFS_MAXPATHLEN>;
  144.  
  145. /*
  146.  * Reply status with file attributes
  147.  */
  148. union attrstat switch (nfsstat status) {
  149. case NFS_OK:
  150.     fattr attributes;
  151. default:
  152.     void;
  153. };
  154.  
  155. struct sattrargs {
  156.     nfs_fh file;
  157.     sattr attributes;
  158. };
  159.  
  160. /*
  161.  * Arguments for directory operations
  162.  */
  163. struct diropargs {
  164.     nfs_fh    dir;    /* directory file handle */
  165.     filename name;        /* name (up to NFS_MAXNAMLEN bytes) */
  166. };
  167.  
  168. struct diropokres {
  169.     nfs_fh file;
  170.     fattr attributes;
  171. };
  172.  
  173. /*
  174.  * Results from directory operation
  175.  */
  176. union diropres switch (nfsstat status) {
  177. case NFS_OK:
  178.     diropokres diropres;
  179. default:
  180.     void;
  181. };
  182.  
  183. union readlinkres switch (nfsstat status) {
  184. case NFS_OK:
  185.     nfspath data;
  186. default:
  187.     void;
  188. };
  189.  
  190. /*
  191.  * Arguments to remote read
  192.  */
  193. struct readargs {
  194.     nfs_fh file;        /* handle for file */
  195.     unsigned offset;    /* byte offset in file */
  196.     unsigned count;        /* immediate read count */
  197.     unsigned totalcount;    /* total read count (from this offset)*/
  198. };
  199.  
  200. /*
  201.  * Status OK portion of remote read reply
  202.  */
  203. struct readokres {
  204.     fattr    attributes;    /* attributes, need for pagin*/
  205.     opaque data<NFS_MAXDATA>;
  206. };
  207.  
  208. union readres switch (nfsstat status) {
  209. case NFS_OK:
  210.     readokres reply;
  211. default:
  212.     void;
  213. };
  214.  
  215. /*
  216.  * Arguments to remote write
  217.  */
  218. struct writeargs {
  219.     nfs_fh    file;        /* handle for file */
  220.     unsigned beginoffset;    /* beginning byte offset in file */
  221.     unsigned offset;    /* current byte offset in file */
  222.     unsigned totalcount;    /* total write count (to this offset)*/
  223.     opaque data<NFS_MAXDATA>;
  224. };
  225.  
  226. struct createargs {
  227.     diropargs where;
  228.     sattr attributes;
  229. };
  230.  
  231. struct renameargs {
  232.     diropargs from;
  233.     diropargs to;
  234. };
  235.  
  236. struct linkargs {
  237.     nfs_fh from;
  238.     diropargs to;
  239. };
  240.  
  241. struct symlinkargs {
  242.     diropargs from;
  243.     nfspath to;
  244.     sattr attributes;
  245. };
  246.  
  247.  
  248. typedef opaque nfscookie[NFS_COOKIESIZE];
  249.  
  250. /*
  251.  * Arguments to readdir
  252.  */
  253. struct readdirargs {
  254.     nfs_fh dir;        /* directory handle */
  255.     nfscookie cookie;
  256.     unsigned count;        /* number of directory bytes to read */
  257. };
  258.  
  259. struct entry {
  260.     unsigned fileid;
  261.     filename name;
  262.     nfscookie cookie;
  263.     entry *nextentry;
  264. };
  265.  
  266. struct dirlist {
  267.     entry *entries;
  268.     bool eof;
  269. };
  270.  
  271. union readdirres switch (nfsstat status) {
  272. case NFS_OK:
  273.     dirlist reply;
  274. default:
  275.     void;
  276. };
  277.  
  278. struct statfsokres {
  279.     unsigned tsize;    /* preferred transfer size in bytes */
  280.     unsigned bsize;    /* fundamental file system block size */
  281.     unsigned blocks;    /* total blocks in file system */
  282.     unsigned bfree;    /* free blocks in fs */
  283.     unsigned bavail;    /* free blocks avail to non-superuser */
  284. };
  285.  
  286. union statfsres switch (nfsstat status) {
  287. case NFS_OK:
  288.     statfsokres reply;
  289. default:
  290.     void;
  291. };
  292.  
  293. /*
  294.  * Remote file service routines
  295.  */
  296. program NFS_PROGRAM {
  297.     version NFS_VERSION {
  298.         void
  299.         NFSPROC_NULL(void) = 0;
  300.  
  301.         attrstat
  302.         NFSPROC_GETATTR(nfs_fh) =    1;
  303.  
  304.         attrstat
  305.         NFSPROC_SETATTR(sattrargs) = 2;
  306.  
  307.         void
  308.         NFSPROC_ROOT(void) = 3;
  309.  
  310.         diropres
  311.         NFSPROC_LOOKUP(diropargs) = 4;
  312.  
  313.         readlinkres
  314.         NFSPROC_READLINK(nfs_fh) = 5;
  315.  
  316.         readres
  317.         NFSPROC_READ(readargs) = 6;
  318.  
  319.         void
  320.         NFSPROC_WRITECACHE(void) = 7;
  321.  
  322.         attrstat
  323.         NFSPROC_WRITE(writeargs) = 8;
  324.  
  325.         diropres
  326.         NFSPROC_CREATE(createargs) = 9;
  327.  
  328.         nfsstat
  329.         NFSPROC_REMOVE(diropargs) = 10;
  330.  
  331.         nfsstat
  332.         NFSPROC_RENAME(renameargs) = 11;
  333.  
  334.         nfsstat
  335.         NFSPROC_LINK(linkargs) = 12;
  336.  
  337.         nfsstat
  338.         NFSPROC_SYMLINK(symlinkargs) = 13;
  339.  
  340.         diropres
  341.         NFSPROC_MKDIR(createargs) = 14;
  342.  
  343.         nfsstat
  344.         NFSPROC_RMDIR(diropargs) = 15;
  345.  
  346.         readdirres
  347.         NFSPROC_READDIR(readdirargs) = 16;
  348.  
  349.         statfsres
  350.         NFSPROC_STATFS(nfs_fh) = 17;
  351.     } = 2;
  352. } = 100003;
  353.